<?php

namespace Admin\Model;

/**
 * Description of RoleModel
 *
 * @author 阿明 symphp@foxmail.com
 */
class RoleModel extends \Think\Model{
    
    /**
     *自动验证账号不能为空
     * @var type 
     */
    protected $_validate = array(
        array('name','require','角色名不能为空',self::EXISTS_VALIDATE,'',self::MODEL_INSERT),
        array('name','','该角色已存在',self::EXISTS_VALIDATE,'unique',self::MODEL_INSERT),
    );
    
    public function getRole(){
        return $this->where('status=1')->select();
    }


    /**
     * 1.添加基本数据
     * 2.角色关联权限
     * @return boolean
     */
    public function addRole(){
        //1.获取基本数据
        if(($role_id = $this->add()) == false){
            return false;
        }
        //2.添加关联权限
        if(($this->_save_permission($role_id)) == false){
            return false;
        }
        return TRUE;
    }
    
    /**
     * 保存数据
     * @param type $role_id
     * @param type $is_new
     * @return type
     */
    private function _save_permission($role_id,$is_new = true){
        //获取权限
        $perms = I('post.perm');
        //构建date 
        $data = array();
        //遍历perms
        foreach ($perms as $perm) {
            $data[] = array(
                'role_id'=>$role_id,
                'permission_id'=>$perm,
            );
        }
        $rolePermission = D('rolePermission');
        if(!$is_new){
            $rolePermission->where(array('role_id'=>$role_id))->delete();
        }
        //实例化模型添加数据
      return $rolePermission->addAll($data);
    }
    
    /**
     * 根据id获取权限信息
     * @param type $id
     * @return boolean
     */
    public function getRoleInfo($id){
        $row = $this->where(array('status'=>1))->find($id);
        if(empty($row)){
           $this->error='角色不存在';
           return FALSE;
        }
        $permission_model =M('RolePermission');
        $permission_ids = $permission_model->where(array('role_id'=>$id))->getField('permission_id',true);
        //返回ztree数据
        $row['permission_ids'] = json_encode($permission_ids);
        return $row;
    }
    
    /**
     * 更新权限
     * @return boolean
     */
    public function updateRole(){
        //保存数据
        $request_dat = $this->data();
        //保存基本信息
        if($this->save($request_dat)===false){
            return false;
        }
        //调用_save_permission 参数为false来更新权限,先删除权限,然后再添加权限
        if($this->_save_permission($request_dat['id'],false) === false){
            $this->error = '保存权限失败';
            return false;
        }
        return TRUE;
    }
    
    /**
     * 逻辑删除
     * @param type $id
     */
    public function _del_permission($id){
        if($this->getFieldById($id)===false){
            $this->error = 'id不存在';
            return false;
        };
        
        $fond = array(
          'status' => 0,
            'name' => array('exp',"CONCAT('name','_del')"),
        );
        
        return $this->where(array('id'=>$id))->setField($fond);
    }
    
    /**
     * 获取列表
     * @param type $filed
     * @return type
     */
    public function getList($filed = '*'){
        return $this->field($filed)->where(array('status'=>1))->select();
    }
    
}
